XMLHttpRequest: loadstart and state See https://github.com/whatwg/xhr/issues/101. 
diff --git a/XMLHttpRequest/loadstart-and-state.html b/XMLHttpRequest/loadstart-and-state.html new file mode 100644 index 0000000..460b2bf --- /dev/null +++ b/XMLHttpRequest/loadstart-and-state.html 
@@ -0,0 +1,40 @@ +<!doctype html> +<title>XMLHttpRequest: loadstart event corner cases</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<div id=log></div> +<script> +async_test(t => { + const client = new XMLHttpRequest + client.onloadstart = t.step_func(() => { + assert_throws("InvalidStateError", () => client.setRequestHeader("General", "Organa")) + assert_throws("InvalidStateError", () => client.withCredentials = true) + assert_throws("InvalidStateError", () => client.send()) + client.onloadstart = null + client.open("GET", "data:,BB-8") + client.send() + }) + client.onload = t.step_func_done(() => { + assert_equals(client.responseText, "BB-8") + }) + client.open("GET", "data:,R2-D2") + client.send() +}, "open() during loadstart") + +async_test(t => { + const client = new XMLHttpRequest + let abortFired = false + client.onloadstart = t.step_func_done(() => { + assert_equals(client.readyState, 1) + client.abort() + assert_true(abortFired) + assert_equals(client.readyState, 0) + }) + client.onabort = t.step_func(() => { + abortFired = true + assert_equals(client.readyState, 4) + }) + client.open("GET", "data:,K-2SO") + client.send() +}, "abort() during loadstart") +</script>